package mesweb.mesweb.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author miemie
 * @since 2018-08-12
 */
@Configuration
@MapperScan({"mesweb.mesweb.mapper"})
public class MybatisPlusConfig {

//    @Autowired
//    private ApiContext apiContext;

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new  PaginationInnerInterceptor();
        paginationInnerInterceptor.setDbType(DbType.SQL_SERVER);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }
//    /**
//     * 分页插件
//     *
//     * @return
//     */
//    @Bean
//    public PaginationInterceptor paginationInterceptor() {
//        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
//
//        // 创建SQL解析器集合
//        List<ISqlParser> sqlParserList = new ArrayList<>();
//
//        // 创建租户SQL解析器
//        TenantSqlParser tenantSqlParser = new TenantSqlParser();
//
//        // 设置租户处理器
//        tenantSqlParser.setTenantHandler(new TenantHandler() {
//
//            // 设置当前租户ID，实际情况你可以从cookie、或者缓存中拿都行
//            @Override
//            public Expression getTenantId(boolean select) {
//                // 从当前系统上下文中取出当前请求的服务商ID，通过解析器注入到SQL中。
//                Long currentProviderId = apiContext.getCurrentTenantId();
//                if (null == currentProviderId) {
//                    throw new RuntimeException("Get CurrentProviderId error.");
//                }
//                return new LongValue(currentProviderId);
//            }
//
//            @Override
//            public String getTenantIdColumn() {
//                // 对应数据库中租户ID的列名
//                return "TenantId";
//            }
//
//            @Override
//            public boolean doTableFilter(String tableName) {
//                // 是否需要需要过滤某一张表
//              /*  List<String> tableNameList = Arrays.asList("sys_user");
//                if (tableNameList.contains(tableName)){
//                    return true;
//                }*/
//                return false;
//            }
//        });
//
//        sqlParserList.add(tenantSqlParser);
//        paginationInterceptor.setSqlParserList(sqlParserList);
//
//        //有部分SQL不需要加上租户ID的表示，需要过滤特定的sql。如果比较多不建议这里配置。
//        paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() {
//            @Override
//            public boolean doFilter(MetaObject metaObject) {
//                MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);
//                // 对应Mapper或者dao中的方法
//                if("com.hszh.wms.web.dao.packge.WmsBoxTypeDao.selectBoxDto2".equals(ms.getId())){
//                    return true;
//                }
//                if("com.hszh.wms.web.dao.packge.WmsBoxTypeDao.selectByNoName2".equals(ms.getId())){
//                    return true;
//                }
//                return false;
//            }
//        });
//        return paginationInterceptor;
//    }
}
